# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/4/2 11:03'

"""

对于这一组电影数据，如果我们希望统计电影分类(genre)的情况，应该如何处理数据？

	统计每个电影分类的个数。
	思路：重新构造一个全为0的数组，列名为分类，如果某一条数据中分类出现过，就让0变为1

"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Pycharm输出窗口有省略号，数据显示不全解决方法
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)

# 如果要显示中文标题和坐标表示，需要添加以下两行代码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

print("=========================================")

file_path = './IMDB-Movie-Data.csv'

df = pd.read_csv(file_path)
print(df["Genre"].head(3))
# 统计分类的列表
temp_list = df["Genre"].str.split(",").tolist()  # [[],[],[]]

# 连续的 for 循环 遍历操作
genre_list = list(set([item for items in temp_list for item in items]))

# 构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)
# print(zeros_df)

# 给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
	# zeros_df.loc[0,["Sci-fi","Mucical"]] = 1
	zeros_df.loc[i, temp_list[i]] = 1

# print(zeros_df.head(3))

# 统计每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)
print(genre_count)

# 排序
genre_count = genre_count.sort_values()
_x = genre_count.index
_y = genre_count.values
# 画图
plt.figure(figsize=(20, 8), dpi=80)
plt.bar(range(len(_x)), _y, width=0.4, color="orange")
plt.xticks(range(len(_x)), _x)

y_ticks = list(range(int(np.max(_y))))[::30]
plt.yticks(y_ticks)

plt.grid()

plt.xlabel("Genre")
plt.ylabel("Count")
plt.title("电影分类统计")

plt.show()
